<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="file:/C:/Users/user/AppData/Local/Temp/multimarkdown_layout-fx.css">
<style>
.container { width: 100%; }
.wiki-container { width: 100%; }
.wiki-body { width: 100%; }
</style>
<link rel="stylesheet" href="file:/C:/Users/user/AppData/Local/Temp/multimarkdown_darcula-fx.css">
<title>&#20113;&#24179;&#21488;&#24320;&#21457;&#25991;&#26723;.md</title>
</head>
<body>
<div class="container">
<div id="readme" class="boxed-group">
<h3>
   <a href="https://gitee.com/hdussta/SSTALink-manage/blob/master/云平台开发文档.md" name="markdown-page" id="markdown-page" class="page-anchor"><span class="bookicon octicon-book"></span>
</a>  云平台开发文档.md
</h3>
<article class="markdown-body">
<h1 id="云平台开发文档"><a href="#云平台开发文档" name="云平台开发文档" class="anchor"><span class="octicon octicon-link"></span></a>云平台开发文档</h1>
<h2 id="1平台结构"><a href="#1平台结构" name="1平台结构" class="anchor"><span class="octicon octicon-link"></span></a>1.平台结构</h2>
<ul>
  <li>Part.1 基于Swoole的TCP服务器
    <ul>
      <li>建立TCP服务器的作用
        <blockquote>
          <p>该TCP服务器用于与各设备的传感器直接交互并将得到的数据存入redis缓存数据库中，并由管理平台向用户展示。</p>
        </blockquote>
      </li>
      <li>主要模块
        <ul>
          <li>设备登录/注销
            <blockquote>
              <p>允许用户设备向TCP服务器发送登录请求。请求格式为 {&quot;m&quot;:&quot;login&quot;,&quot;msg&quot;:{&quot;id&quot;:&quot;xxx&quot;,&quot;key&quot;:&quot;***&quot;}}
              其中id对应的值为管理平台生成的设备ID，key对应的值为管理平台生成的设备秘钥。服务器会查询Mysql数据库判断是否能够登录。</p>
            </blockquote>
          </li>
          <li>连接保持/接收数据
            <blockquote>
              <p>由于TCP服务器采用的是与管理平台不同的连接方式(TCP服务器为TCP长连接，管理平台为HTTP)所以需要心跳包等设计来保持连接，
              并且要考虑到网络状况不佳时的断开重连机制。同时服务器会接收设备发送的数据并根据数据的类型以及是否有WebHook做出相应的处理.</p>
            </blockquote>
          </li>
          <li>Redis数据库读写
            <blockquote>
              <p>设备发送给服务器的数据最终会保存到Redis数据库中并由管理平台读取展示给用户。数据读写主要要考虑到存储的类型，读写效率等硬件方面的因素。</p>
            </blockquote>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Part.2 基于Fastadmin的管理平台
    <ul>
      <li>管理平台功能
        <blockquote>
          <p>管理平台允许用户创建/管理设备与传感器，获取传感器的数据并根据用户选定的类型以不同的形式向用户展示数据</p>
        </blockquote>
      </li>
      <li>主要模块
        <ul>
          <li>用户管理
            <blockquote>
              <p>提供用户注册，用户登录，找回密码等基本功能。</p>
            </blockquote>
          </li>
          <li>创建/管理设备与传感器
            <blockquote>
              <p>允许用户创建/管理设备和传感器。
              用户可以为设备命名，在设备中创建传感器。传感器根据使用的数据类型分为数值传感器、文本传感器、开关传感器、GPS传感器和图像传感器，不同的传感器会在数据展示部分已不同的形式展示数据。
              平台会为每个设备设置专有的设备ID和秘钥，该秘钥用于验证用户设备的登录、ID用于区分不同的用户设备。</p>
            </blockquote>
          </li>
          <li>展示/导出数据
            <blockquote>
              <p>平台会从Mysql数据库(暂定，之后可能会改为Redis数据库)中读取设备发送的数据并已不同的形式展示给用户。
              目前允许的数据类型有 数值型，文本型，开关型，GPS型和图像型。数值型会自动生成以时间为横坐标，数值为纵坐标的折线图。GPS型会通过百度地图API生成路线图。文本型，开关型和图像型都会以表格的形式展示数据。</p>
            </blockquote>
          </li>
          <li>WebHook
            <blockquote>
              <p>用户可以在传感器中添加WebHook指向自己的服务器，平台会在接收到设备数据之后将数据转发到用户的服务器由用户来处理数据。</p>
            </blockquote>
          </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
<h2 id="2平台连接"><a href="#2平台连接" name="2平台连接" class="anchor"><span class="octicon octicon-link"></span></a>2.平台连接</h2>
<p><img src='svg1.svg'/></p>
<h2 id="3开发进度"><a href="#3开发进度" name="3开发进度" class="anchor"><span class="octicon octicon-link"></span></a>3.开发进度</h2>
<ul>
  <li>TCP服务器
    <ul>
      <li>设备登录 （已完成）</li>
      <li>数据交互 （未完成）</li>
      <li>Redis交互 （未完成）</li>
    </ul>
  </li>
  <li>云管理平台
    <ul>
      <li>用户注册/登录 (已完成)</li>
      <li>创建/管理/删除设备 (已完成)</li>
      <li>创建/管理/删除传感器 (已完成)</li>
      <li>接收/展示数据 (Mysql已完成，之后会改为Redis)</li>
      <li>WebHook （未开始）</li>
    </ul>
  </li>
</ul>
<h2 id="4当前开发目标"><a href="#4当前开发目标" name="4当前开发目标" class="anchor"><span class="octicon octicon-link"></span></a>4.当前开发目标</h2>
<ul>
  <li>完成WebHook
    <blockquote>
      <p>WebHook在整个平台中属于较为独立的部分而且其所需要的前置基础也都已经完成。WebHook的实现比较简单只需要掌握php和Mysql即可进行开发。</p>
    </blockquote>
  </li>
  <li>完成TCP服务器与Redis数据库的交互
    <blockquote>
      <p>TCP服务器与Redis数据库的交互属于平台中较为重要的环节，并且要考虑到在多设备连接时操作数据库的效率和安全问题，所以这部分依然由林嘉琪负责。</p>
    </blockquote>
  </li>
  <li>修改数据存储方式(Mysql-&gt;Redis)
    <blockquote>
      <p>目前管理平台获取数据的方式是从Mysql数据库中获取数据，但是由于Mysql数据库的读写速度有限，不适合做频繁的写入与读取，所以之后会将Mysql数据库改为更适合频繁读写的Redis数据库。</p>
    </blockquote>
  </li>
</ul>
<h2 id="5额外-webhook具体实现"><a href="#5额外-webhook具体实现" name="5额外-webhook具体实现" class="anchor"><span class="octicon octicon-link"></span></a>5.额外-WebHook具体实现</h2>
<ul>
<ul>
  <li>WebHook完整流程</li>
</ul>
    <p><img src='svg2.svg'/></p>
  <li>
    <p>需要实现的部分</p>
    <ul>
      <li>提供接口给TCP服务器调用</li>
      <li>查询数据库获得该传感器的所有WebHook地址</li>
      <li>访问这些地址，发送数据。</li>
    </ul>
  </li>
</ul>
</article>
</div>
</div>
</body>
</html>
